/**
 * 测试问卷功能
 */

var is_exist_key = null;
var spcode = null;
var answer = null;


//页面载入初始化
$( "body" ).ready( function( e )
{
	try
	{
		if( typeof ( eval( "init" ) ) == "function" )
			eval( "init();" );
	}
	catch( e )
	{
	}

	// 键盘事件
	$( "body" ).bind( "keyup", bodyKeyupHandler );
	answer = $("#answer").val();
	is_exist_key = $("#is_exist_key").val();
	// 初始化
	init_bind();

	// 若是查看结果，则显示已经选择的选项
	if( !empty( answer ) )
	{
		init_answer( answer );
	}
} );

//--------------------------------------------------------------------------
//
//	method
//
//--------------------------------------------------------------------------

function init_bind()
{
	// 初始隐藏答案模块
	$( "#vote_answer" ).hide();
	$( "#vote_answer" ).css( "position", "fixed" );
	$( "#vote_answer" ).css( "zIndex", "99999" );
	$( "#vote_answer" ).move( 10, 10 );

	// 测评结果，再次查看按钮
	$( "#vote_result" ).hide();
	$( "#vote_result" ).move( $( window ).width() - 200, 30 );
	$( "#btnClose" ).click( function()
	{
		overlay( false );
		$( "#vote_answer" ).slideUp( 200 );
		$( "#vote_result" ).slideDown( 500 );
	} );
	$( "#vote_result" ).click( function()
	{
		$( this ).slideUp( 200 );
		overlay( true );
		relocate_result();
	} );

	// 若是查看问卷结果，则隐藏提交按钮
	if( is_exist_key )
	{
		$( "#btnSubmit" ).hide();
		$( "#vote_form input" ).prop( "readonly", true );
	}
	else
	{
		// 绑定提交方法
		$( "#btnSubmit" ).click( submit_form );

		// 初始化绑定所有选项功能
		$( "#vote_list .right > .checkbox" ).click( checkboxHandler );
	}

	// 测试数据
	//	$( "#age" ).val( "6" );
	//	$( "#city" ).val( "杭州西湖区" );
	//	$( "#phone" ).val( "15258293912" );
}

function init_answer( value )
{
	var size = 0;
	var last1 = $.parseJSON(value);

	for( var ns in last1 )
	{
		var id = ns;
		var d = last1[ ns ];
		var items = d.items;
		
		$( "#" + id ).find( "ul li" ).each( function( j )
		{
			$( this ).find( ".right label" ).eq( items[ j ] ).addClass( "selected" );
		} );
		
		$("[name="+id+"]").find( "ul li" ).each( function( j )
		{
				$( this ).find( ".right label" ).eq( items[ j ] ).addClass( "selected" );
		} );
		size++;
	}

	// 若数量为 0 代表空数据
	if( size == 0 )
		return;

	// 读取测评问卷结果
	var data = {
		key: $( "#key" ).val()
	};

	submitter.post( "ask_answer_read.json", data, function( d )
	{
		var votelist = d.votelist;
		var answer = JSON.parse(d.answer);
		var as_item = d.askIList;
		var scores = d.askSList;			
		//分数
		var score_result = new Array();
		
		var size = 0;
		for( var ns in answer ){
			var d = answer[ ns ];
			var an_items = d.items;
			var score = 0;
			for(var i=0;i<an_items.length;i++){
				// 该题的问卷配置
				var item_cnf = as_item[size];
				var cnf = item_cnf.itemList[i].i;
				// 用户选择的该题的选项
				var sel1 = an_items[i];
				var sel = sel1 < 0 ? 0 : sel1;
				// 取得选项对应的分数
				score += get_single_score(sel,cnf); 
			}
			score_result[ns] = score;
			size++
		}
		var result = new Array();
		if(scores.length>0){
			for(var i=0;i<scores.length;i++){
				// 按来源统计实际分数
				var sa = scores[i].source;
				var r = {};
				var score =0;
				for(var item_id in sa){
					var item = sa[item_id];
					score += score_result[item];
				}
				r["id"] = scores[i].id;
				r["topic"] = scores[i].topic;
				r["result"] = get_single_result(score,scores[i].scoresList);
				result[i] = r;
			}
		}
		if(result.length>0){
		/*	// 计算测评结果（由数据保存页计算结果）
			analyze_result(result);
			// 列出测评结果
			overlay( true );
			relocate_result();*/
			
			// 缓存提交成功返回的唯一标识号
			$( "#key" ).val( d.key );
			// 计算测评结果（由数据保存页计算结果）
			analyze_result(result);
			// 列出测评结果
			overlay( true );
			relocate_result();
			
			submit_success( d );
			
		}
		else
		{
			infopad.err("数据异常请稍后再试。");
		}
	}, "json" );
}
/**
 * 从评分规则集合中查获指定ID的配置
 *
 * @param int   $score
 * @param Array $cnf
 */
function get_single_result(score, cnf){
	var size = cnf.length;
	for( var i = 0;i<size;i++ ){
		var v = cnf[i];
		var s1 = v.s1;
		var s2 = v.s2;
		var r =  v.r;
		if( s1 == '' || s2 == '' ){
			if( s2 == '' ){
				if(score <=s1 ) return r;
			}else{
				if( s1 == '' ){
					if( score >= s2 ) return r;
				}
			}
		}
		else
		{
			if( s1 == s2 )
			{
				if( score == s1 ) return r;
			}
			else
			{
				if( score >= s1 && score <= s2 ) return r;
			}
		}
	}

	return '';
}
/**
* 从问卷配置中取得指定选项的分数
* <p>list 格式如 “[i] => 从不:0,偶尔:0,经常:1,总是:1”</p>
*
* @param int    sel
* @param string list
*/
function get_single_score(sel,list){
	var la = new Array();
	var la = list.split(",");
	var ra = la[sel].split(":");
	return parseInt(ra[1]);
}
//--------------------------------------------------------------------------
//
//	submit
//
//--------------------------------------------------------------------------

function submit_form()
{
	var urls = location.search;
	// 若是查看问卷结果，则不需要提交
	if( is_exist_key )
		return;

	var data = {};

	// 测评选项
	var answer = collet_data();
	data.answer = JSON.stringify( answer );

	if( answer == null )
		return false;

	// 附加标识信息
	data.key = $( "#key" ).val();
	data.ask = $( "#ask" ).val();
	var url = urls.substr(4,5);
	data.spcode = $("#spcode").val();
	data.urls = $("#urls").val();
	data.ip = returnCitySN["cip"];
	// 联系信息
	data.age = parseInt( $( "#age" ).val() );
	data.city = $( "#city" ).val();
	data.phone = $( "#phone" ).val();
	data.qq = $( "#qq" ).val();
	data.email = $( "#email" ).val();
	data.phones = $("#phones").val();
	
	if(data.phone =="" ||  data.phone ==""  || data.city =="" ||!(/^[0-9]*[1-9][0-9]*$/).test(data.age) ||!(/^1[34578]\d{9}$/).test(data.phone) ||!(/^[\u4E00-\u9FA5]*$/).test(data.city)){
   		if(data.phone=="")
   		{
   			infopad.err("号码不能为空！");
   		}
   		else if(!(/^1[34578]\d{9}$/).test(data.phone))
   		{
   			infopad.err("手机号码不准确！");
   		} 
   		if(data.city=="")
   		{
   			infopad.err("号码不能为空！");
   		}
   		else if(!(/^[\u4E00-\u9FA5]*$/).test(data.city))
   		{
   			infopad.err("城市需要为汉字");
   		}  
   		else if(!(/^[0-9]*[1-9][0-9]*$/).test(data.age))
   		{
   			infopad.err("年龄需要为大于0的数字");
   		}
		return;
	}
	
	submitter.post(contextPath+"/admin/add_answer_review.json", data, function( d )
	{
			var answer = JSON.parse(d.answer);
			var as_item = d.askIList;
			var scores = d.askSList;			
			//分数
			var score_result = new Array();
			
			var size = 0;
			for( var ns in answer ){
				var d = answer[ ns ];
				var an_items = d.items;
				var score = 0;
				for(var i=0;i<an_items.length;i++){
					// 该题的问卷配置
					var item_cnf = as_item[size];
					var cnf = item_cnf.itemList[i].i;
					// 用户选择的该题的选项
					var sel1 = an_items[i];
					var sel = sel1 < 0 ? 0 : sel1;
					// 取得选项对应的分数
					score += get_single_score(sel,cnf); 
				}
				score_result[ns] = score;
				size++
			}
			var result = new Array();
			if(scores.length>0){
				for(var i=0;i<scores.length;i++){
					// 按来源统计实际分数
					var score =0;
					var sa = scores[i].source;
					var r = {};
					for(var item_id in sa){
						var item = sa[item_id];
						score += score_result[item];
					}
					r["id"] = scores[i].id;
					r["topic"] = scores[i].topic;
					r["result"] = get_single_result(score,scores[i].scoresList);
					result[i] = r;
				}
			}
			if(result.length>0){
				// 缓存提交成功返回的唯一标识号
				$( "#key" ).val( d.key );
				// 计算测评结果（由数据保存页计算结果）
				analyze_result(result);
				// 列出测评结果
				overlay( true );
				relocate_result();
				
				submit_success( d );
			}
			else
			{
				infopad.err("数据异常请稍后再试。");
			}
		
	}, "json" );
}

// 列出测评结果
function analyze_result( d )
{

	var ul = $( "#vote_answer .inner_space ul" );
	var h = "";
	ul.empty();

	for( var i=0;i<d.length;i++ )
	{
		// <li><span class="title">注意力缺陷</span><span class="answer">有严重的注意力缺陷问题</span></li>
		h += "<li rel=\"" + d[i].id + "\">\n";
		h += "<span class=\"title\">" + d[i].topic + "</span>\n";
		h += "<span class=\"answer\">" + d[i].result + "</span>\n";
		h += "</li>\n";
	}
	ul.append( h );
}

// 重新调整测评结果的位置
function relocate_result()
{
	var left = ( $( window ).width() - $( "#vote_answer" ).outerWidth() ) / 2;
	var top = ( $( window ).height() - $( "#vote_answer" ).outerHeight() ) / 2.5;
	$( "#vote_answer" ).move( left, top );
	$( "#vote_answer" ).slideDown( 600 );

	// 绑定窗口大小更改事件，动态调整测评结果的显示位置
	$( window ).bind( 'resize', reposition );
}

function reposition()
{
	var left = ( $( window ).width() - $( "#vote_answer" ).outerWidth() ) / 2;
	var top = ( $( window ).height() - $( "#vote_answer" ).outerHeight() ) / 2.5;
	if( top < 0 )
		top = 0;
	if( left < 0 )
		left = 0;
	$( "#vote_answer" ).move( left, top );
	$( "#vote_result" ).move( $( window ).width() - 200, 30 );
}

function submit_success( d )
{
	// 提示成功，并在点击确定后列出测评结果
	// 先收起提交表单，以免重复提交
	$( "#vote_form" ).find("#button_group").slideUp( 200 );
	// 禁用所有选项，不能再更改选择
	$( "#vote_list .right > .checkbox" ).unbind( "click" );
}

// 收集测评选择数据
function collet_data()
{
	var a = {};
	var err = false;

	$( "#vote_list .item_child" ).each( function( i )
	{
		var id = $( this ).attr( "id" );
		var topic = $( this ).find( "p.topic" ).text();
		var items = [];// 选项列表，记录每一题选择的序号而不是分数

		$( this ).find( "ul li" ).each( function( j )
		{
			var index = $( this ).find( ".right label.selected" ).index();

			if( index == -1 )
			{
				infopad.err( "问卷未完成！" );
				$( window ).scrollTop( $( this ).find( ".left" ).position().top - 50 );
				$( this ).addClass( "unselect" );
				err = true;
				return false;
			}

			items.push( index );
		} );

		if( err )
		{
			return false;
		}

		a[ id ] = {
			id: id,
			topic: topic,
			items: items
		};
	} );

	if( err )
	{
		return null;
	}

	return a;
}

//--------------------------------------------------------------------------
//
//	event
//
//--------------------------------------------------------------------------

function checkboxHandler( e )
{
	// 重置所有选项
	$( this ).parent().find( ".checkbox" ).removeClass( "selected" );

	// 选定当前选项
	$( this ).toggleClass( "selected" );

	// 移除可能由于未选择提示的红色提醒边框样式
	$( this ).parent().parent().removeClass( "unselect" );
}

function bodyKeyupHandler( e )
{
	if( e.ctrlKey && e.which == 13 )
	{
		submit_form();
	}
}